<?php
/*
 * @Description: 实现文件上传
 * @Author: Zhy
 * @Date: 2024-06-24 08:19:40
 * @LastEditTime: 2024-06-24 11:15:49
 * @LastEditors: Zhy
 */

// 生成随机名的函数
function randName($name) {
    // 生成文件的时间部分
    $newname = date('YmdHis');
    // 加上随机的6位数字
    $str = '0123456789';
    for($i = 0; $i < 6; $i++) {
        $newname .= $str[mt_rand(0, strlen($str) - 1)];
    }
    // 加上原文件名的后缀
    $newname.= strrchr($name, '.');
    return $newname;
}

/**
 * @description:
 * @Author: Zhy
 * @Date: 2024-06-24 08:22:54
 * @return {*}
 * @param {*} $file 上传的文件的信息
 * @param {*} $allow 允许上传的文件类型
 * @param {*} $error 记录错误信息
 * @param {*} $path 文件上传的目录
 * @param {*} $maxsize 文件上传的大小
 * @param {*} $newname 文件的新名字
 */
// function upload($file, $allow, $error, $path, $maxsize = (1024*1024)) {
function upload($file, $allow, $error, $path, $maxsize = 1048576) {
    switch($file['error']) {
        case 1: $error = '上传失败，超出了文件限制的大小';
                return false;
        case 2: $error = '上传失败，超出了浏览器规定的文件大小';
                return false;
        case 3: $error = '上传失败，文件上传不完整';
                return false;
        case 4: $error = '上传失败，请先选择文件';
                return false;
        case 6:
        case 7: $error = '上传失败，服务器繁忙，请稍后再试';
                return false;
    }
    // 验证逻辑错误
    // 验证文件大小
    if($file["size"] > $maxsize) {
        $error = '上传失败，文件大小超出限制';
        return false;
    }
    // 验证文件类型
    if(!in_array($file['type'], $allow)) {
        $error = '上传失败，文件格式不正确，运行的格式有：' + implode(',', $allow);
        return false;
    }

    // 移动临时文件
    // 先得到文件的随即名
    $newname = randName($file['name']);
    $target = $path.'/'.$newname;
    // 开始移动
    $result = move_uploaded_file($file['tmp_name'], $target);
    if($result) {
        return $newname;
    } else {
        $error = '上传失败，发生未知错误';
        return false;
    }
}

?>
